﻿#include <QApplication>
#include <QDomDocument>
#include <QFile>
#include <QFileDialog>
#include <QDebug>

#include "videohandler.h"
//#include "mainwindow.h"

class Contact
{
public:
    QString m_name;
    QString m_mobile;
};



bool parseXML(const QString &fileName, QList<Contact*> &contacts)
{
    QDomDocument doc;
    QFile file(fileName);
    if (!file.open(QIODevice::ReadOnly)) {
        qDebug() << file.errorString();
        return false;
    }
    QString strError;
    int errLine;
    int errColumn;

    if (!doc.setContent(&file,&strError,&errLine,&errColumn)) {//开始读取文件，设置内容。
        qDebug() << "Parse xml error :" << strError
                 << "Line:" << errLine << "Col:"<< errColumn;
        file.close();
        return false;
    }
    file.close();//文件读取完毕，关闭文件

    QDomNodeList nodeList = doc.elementsByTagName("people");

    for (int i = 0; i < nodeList.count(); ++i) {
        qDebug() << nodeList.at(i).nodeValue();
        qDebug() << nodeList.at(i).nodeType();
        qDebug() << nodeList.at(i).nodeName();
    }
    QDomElement element = doc.documentElement().firstChildElement("people");//获得文件元素中的第一个元素。即第一个树枝
    Contact* contact;
    while (!element.isNull()) {
        contact = new Contact;
        contact->m_name = element.attribute("name");
        QDomElement child = element.firstChildElement("mobile");//第一个树枝的子分支
        if (!child.isNull()) {//因为该树枝只有一个子分支，所以没有进行循环。
            contact->m_mobile = child.text();
        }
        contacts.append(contact);//添加到列表中
        element = element.nextSiblingElement("people");//下一个兄弟元素，即根下的同级分支
    }
    return true;
}//函数为传入传出参数，由此函数可以得到一个xml文件中的所有Contact类的数据。


int main_(int argc, char *argv[])
{
    QApplication a(argc, argv);
//    MainWindow w;
//    w.show();
    QString fileName  = QFileDialog::getOpenFileName();
    QList<Contact*> contactList;
    qDebug() << parseXML(fileName,contactList);
    foreach (Contact * contact, contactList) {
        qDebug() << contact->m_mobile << contact->m_name;
    }


    return a.exec();
}

//QString

const char * coutUTF8(QString str)
{
    return str.toStdString().c_str();
}

int main(int argc, char *argv[])
{

    QString str("中文");
    qDebug() << str.toStdString().c_str();
    qDebug() <<  QString("QT5中文").toStdString().c_str();
    QApplication app(argc,argv);
    QString fileName = QFileDialog::getOpenFileName();
    if (fileName == "")
        return 1;
    QFile file(fileName);
    file.open(QFile::ReadOnly);


    QXmlSimpleReader reader;
    VideoHandler handler;
    reader.setContentHandler(&handler);
//    reader.setErrorHandler(&handler);
    QXmlInputSource source(&file);

/*
    QXmlInputSource source;
    QByteArray data = file.readAll();
    source.setData(data);
*/
    if (reader.parse(&source)) {
//        qDebug() << "video page - "<< handler.m_pageUrl;
        qDebug() << handler.m_actors.toStdString().c_str()
                 << handler.m_pageUrl.toStdString().c_str()
                 << handler.m_tags.toStdString().c_str()
                 << handler.m_videoName.toStdString().c_str()
                 << handler.m_summary.toStdString().c_str();
//        QDebug debug;
    }else {
//        reader.errorHandler()->errorString();
        reader.errorHandler();
        handler.errorString();
        qDebug() << "parse videos failed";
    }

    return app.exec();
}
